/*
 * Notation.java
 *
 * Created on 20 marzo 2004, 10.45
 */

package net.ermannofranco.xml.schema;

import net.ermannofranco.xml.Static;
import net.ermannofranco.xml.Tag;

/**
 * 
 * @author ermanno (ermanno.franco@gmail.com)
 */
public class Notation extends SchemaTag {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1231519508566763644L;

	/**
	 * Creates a new instance of Notation Protetto
	 * 
	 * @param level
	 *            livello di indentazione
	 * @param container
	 *            tag contenitore
	 * 
	 * @param name
	 *            nome della notazione
	 * @param publicName
	 *            nome pubblico di intepretazione
	 */
	protected Notation(int level, ISchemaTag container, String name,
			String publicName) {
		super("notation", level, container);
		setName(name).addAttr("public", publicName);

	}

	/**
	 * @param name
	 * @return
	 */
	private Notation setName(String name) {
		Static.validateNMToken(name);

		addAttr("name", name);
		return this;
	}

	/**
	 * @param system
	 * @return
	 */
	public Notation setSystem(String system) {
		addAttr("system", system);// URIref
		return this;
	}

	/**
	 * aggiunge un tag Annotation che contiene un tag Documentation
	 * 
	 * @param explanation
	 *            Stringa di documentazione
	 * @return autoriferimento all'oggetto corrente
	 */
	public Notation addDocumentation(String explanation) {
		addAnnotation().addDocumentation(explanation);
		return this;
	}

	/**
	 * aggiunge un tag Annotation che contiene un tag Documentation
	 * 
	 * @param explanation
	 *            testo della documentazione
	 * @param language
	 *            attributo di xml:lang, seguire le regole di i18n
	 * @return riferimento all'oggetto corrente
	 */
	public Notation addDocumentation(String explanation, String language) {
		addAnnotation().addDocumentation(explanation, language);
		return this;
	}
}
